#include "pch.h"
#include "CSHGetFileInfo.h"
 
 
HIMAGELIST  CSHGetFileInfo::GetSystemImageListHandle(BOOL bSmallIcon)
{
    HIMAGELIST hSystemImageList;
    SHFILEINFO ssfi;
    if (bSmallIcon)
    {
        hSystemImageList = (HIMAGELIST)SHGetFileInfo( (LPCTSTR)_T("c:\\"), 0, &ssfi,
            sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
    }
    else
    {
        hSystemImageList = (HIMAGELIST)SHGetFileInfo( (LPCTSTR)_T("c:\\"), 0, &ssfi,
            sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
    }
    return hSystemImageList;
}
 
 
int CSHGetFileInfo::GetFileIconIndex(CString strFileName, BOOL bSmallIcon)
{
    SHFILEINFO sfi;
    if (bSmallIcon)
    {
        SHGetFileInfo( (LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
            sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    }
    else
    {
        SHGetFileInfo( (LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
            sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
    }
    return sfi.iIcon;
}
 
int CSHGetFileInfo::GetDirIconIndex(BOOL bSmallIcon)
{
    SHFILEINFO sfi;
    if (bSmallIcon)
    {
        SHGetFileInfo( (LPCTSTR)_T("Doesn't matter"), FILE_ATTRIBUTE_DIRECTORY, &sfi,
            sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    }
    else
    {
        SHGetFileInfo( (LPCTSTR)_T("Doesn't matter"), FILE_ATTRIBUTE_DIRECTORY, &sfi,
            sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
    }
    return sfi.iIcon;
 
}
 
int CSHGetFileInfo::GetDiskIconIndex(LPCTSTR diskName, BOOL bSmallIcon)
{
    SHFILEINFO sfi;
    DWORD attr = ::GetFileAttributes(diskName);
    if (bSmallIcon)
    {
        ::SHGetFileInfo(diskName, attr, &sfi, sizeof(sfi),
            SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES); //获取文件信息
    }
    else
    {
        ::SHGetFileInfo(diskName, attr, &sfi, sizeof(sfi),
            SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES); //获取文件信息
    }
    return sfi.iIcon;
}
 
HICON CSHGetFileInfo::GetFileIconHandle(CString strFileName, BOOL bSmallIcon)
{
    SHFILEINFO sfi;
    if (bSmallIcon)
    {
        SHGetFileInfo( (LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
            sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    }
    else
    {
        SHGetFileInfo( (LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
            sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
    }
    return sfi.hIcon;
}
 
HICON CSHGetFileInfo::GetFolderIconHandle(BOOL bSmallIcon)
{
    SHFILEINFO sfi;
    if (bSmallIcon)
    {
        SHGetFileInfo( (LPCTSTR)_T("Doesn't matter"), FILE_ATTRIBUTE_DIRECTORY, &sfi,
            sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    }
    else
    {
        SHGetFileInfo( (LPCTSTR)_T("Doesn't matter"), FILE_ATTRIBUTE_DIRECTORY, &sfi,
            sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
    }
    return sfi.hIcon;
}
 
HICON CSHGetFileInfo::GetDiskIconHandle(LPCTSTR diskName, BOOL bSmallIcon)
{
    SHFILEINFO sfi;
    DWORD attr = ::GetFileAttributes(diskName);
    if (bSmallIcon)
    {
        ::SHGetFileInfo(diskName, attr, &sfi, sizeof(sfi),
            SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES); //获取文件信息
    }
    else
    {
        ::SHGetFileInfo(diskName, attr, &sfi, sizeof(sfi),
            SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES); //获取文件信息
    }
    return sfi.hIcon;
}
 
CString CSHGetFileInfo::GetFileType(CString strFileName)
{
    SHFILEINFO sfi;
    SHGetFileInfo((LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
        sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
    return sfi.szTypeName;
}
